C++11 并发学习(一)


学习自大神博客

并发和并行

与并发相近的另一个概念是并行(Parallel)。和并发所描述的情况一样,并行也是指两个或多个任务被同时执行。但是严格来讲,并发和并行的概念并是不等同的,两者存在很大的差别。下面我们来看看计算机科学家们是怎么区分并发和并行的。

并发是一个处理器同时处理多个任务,而并行是多个处理器或者是多核的处理器同时处理多个不同的任务。前者是逻辑上的同时发生(simultaneous),而后者是物理上的同时发生。

C++并发

C++11多线程相关的头文件

C++11 新标准中引入了五个头文件来支持多线程编程,它们分别是 < atomic>, < thread>, < mutex>, < condition_variable> 和 < future>。

①. < atomic>:该头文主要声明了两个类, std::atomic 和 std::atomic_flag,另外还声明了一套 C 风格的原子类型和与 C 兼容的原子操作的函数。
< atomic> 一一 可以用来实现数据结构的无锁结构

②. < thread>:该头文件主要声明了 std::thread 类,另外 std::this_thread 命名空间也在该头文件中。
之前在Linux下写多线程的时候用的Pthread,但是在实现线程池的时候,有用到过C++11的,具体是学习自这个大神的C++的线程池demo

③. < mutex>:该头文件主要声明了与互斥量(Mutex)相关的类,包括 std::mutex_* 一系列类,std::lock_guard, std::unique_lock, 以及其他的类型和函数。

④. < condition_variable>:该头文件主要声明了与条件变量相关的类,包括 std::condition_variable 和 std::condition_variable_any。

⑤. < future>:该头文件主要声明了 std::promise, std::package_task 两个 Provider 类,以及 std::future 和 std::shared_future 两个 Future 类,另外还有一些与之相关的类型和函数,std::async() 函数就声明在此头文件中。
这里介绍一下std::async() 一一 用来优雅的实现C++异步,一般和std::future()一起使用,前者用于创建异步任务,后者从异步任务中获取结果。

接下来我们就是要具体地学习每一个部分了,不过大部分就是之前学习过,用过的,应该学起来还是很快的。